home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / proc / frecimmd.c < prev    next >
C/C++ Source or Header  |  1996-07-10  |  2KB  |  88 lines

  1. /*
  2.  * CopyRight 1995. Nicholas Poljakov all rights reserved.
  3.  */
  4. #include <malloc.h>
  5. #include <dos.h>
  6. #include <stdio.h>
  7. #include <recimmed.h>
  8. #include <state1.h>
  9.  
  10.  recimmed (tp_id,
  11.            conv_id,fill,
  12.            p_rc,
  13.            length,max_length,
  14.            p_rts,p_data,p_wr)
  15.  unsigned char tp_id[8];
  16.  unsigned long conv_id;
  17.  unsigned char *p_data;
  18.  unsigned int *length ;
  19.  unsigned char *p_rts;
  20.  unsigned char fill;
  21.  unsigned char *p_wr;
  22.  unsigned int max_length;
  23.  
  24.  struct   rc {
  25.  unsigned   int   prim ;
  26.  unsigned   long  sec  ; }  *p_rc;
  27.  
  28.          {
  29.   union REGS inregs,outregs;
  30.   struct SREGS segregs;
  31.   struct recimmed *ptr;
  32.   char *p;
  33.        char _near *dp1;
  34.        char _near *dp2;
  35.   int i,l;
  36.  
  37.         l = sizeof(struct recimmed);
  38.      if ((ptr = (char *)calloc(1,l)) == NULL)
  39.        {
  40.         p_rc->prim = PORT_BUSY; /* ¡ÑΓ ñ«ßΓπ»¡«⌐ »á¼∩Γ¿ */
  41.         p_rc->sec = 0x00;
  42.         return(0);
  43.         }
  44.  
  45.      ptr->code=Receive_immediate; /* code primitiv */
  46.      ptr->e_cd=0x0000; /*  ex   */
  47.  
  48.      memcpy (ptr->tp_id,tp_id,8);
  49.  
  50.      ptr->conv_id=conv_id;
  51.      ptr->fill = fill;
  52.      ptr->maxlen=max_length;
  53.      ptr->data_addr=p_data;
  54. /*
  55.      inregs.x.dx = FP_OFF(ptr);
  56.      segregs.ds = FP_SEG(ptr);
  57.      inregs.x.ax = ptr->code;
  58.  
  59.          int86x(0x68,&inregs,&outregs,&segregs);
  60.  */
  61.      dp1 = FP_OFF( ptr );
  62.      dp2 = FP_SEG( ptr );
  63.      _asm
  64.          {
  65.             push  ds
  66.             mov   dx, word ptr dp1[0]
  67.             mov   ax, word ptr dp2[0]
  68.         mov   ds, ax
  69.         mov   ax, Receive_immediate
  70.             int   68h
  71.             pop   ds
  72.          }
  73.  
  74.  
  75.     *p_wr=ptr->what_received;
  76.     *length=ptr->data_lt;
  77.     *p_rts=ptr->rts;
  78.      p_rc->prim =ptr->prim_rc;
  79.      p_rc->sec  = ptr->sec_rc;
  80.     p = ptr->data_addr;
  81.     for (i=0;i<ptr->data_lt;i++)
  82.        {
  83.         *(p_data+i)=*(p+i);
  84.        }
  85.                free(ptr);
  86.                return(0);
  87.          }
  88.